home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / pgpnet_detect.nasl < prev    next >
Text File  |  2005-03-31  |  4KB  |  129 lines

  1. #
  2. # This script was written by Noam Rathaus <noamr@securiteam.com>
  3. #
  4. # See the Nessus Scripts License for details
  5. #
  6.  
  7. if(description)
  8. {
  9.  script_id(10175);
  10.  script_version ("$Revision: 1.16 $");
  11.  
  12.  name["english"] = "Detect presence of PGPNet server and its version";
  13.  script_name(english:name["english"]);
  14.  
  15.  desc["english"] = "
  16. It is possible to detect the existing of PGPNet, by connecting to its
  17. open UDP port (500) and sending it a session init packet, the PGPNet daemon
  18. would respond (making it possible to know that PGPNet is installed on the
  19. computer) with the version of the OpenPGP package it uses.
  20.  
  21. Solution: Block those ports from outside communication
  22.  
  23. Risk factor : Medium";
  24.  
  25.  script_description(english:desc["english"]);
  26.  
  27.  summary["english"] = "Detect presence of PGPNet server and its version";
  28.  script_summary(english:summary["english"]);
  29.  
  30.  script_category(ACT_GATHER_INFO);
  31.  
  32.  script_copyright(english:"This script is Copyright (C) 1999 SecuriTeam");
  33.  script_family(english:"Service detection");
  34.  
  35.  exit(0);
  36. }
  37.  
  38. #
  39. # The script code starts here
  40. #
  41.  
  42. if(islocalhost())exit(0);
  43. srcaddr = this_host();
  44. dstaddr = get_host_ip();
  45.  
  46. magic_num = rand();
  47.  
  48. r1 = rand() % 255;
  49. r2 = rand() % 255;
  50.  
  51. raw_data = raw_string(
  52. r1,    r2,  0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  53. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x02, 0x00, 0x00, 
  54. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x0D, 0x00, 0x00, 0x5C, 0x00, 0x00, 
  55. 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x01, 0x01, 0x00, 
  56. 0x02, 0x03, 0x00, 0x00, 0x24, 0x01, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x06, 
  57. 0x80, 0x02, 0x00, 0x02, 0x80, 0x03, 0x00, 0x03, 0x80, 0x04, 0x00, 0x05, 0x80, 
  58. 0x0B, 0x00, 0x01, 0x00, 0x0C, 0x00, 0x04, 0x00, 0x01, 0x51, 0x80, 0x00, 0x00, 
  59. 0x00, 0x24, 0x02, 0x01, 0x00, 0x00, 0x80, 0x01, 0x00, 0x05, 0x80, 0x02, 0x00, 
  60. 0x01, 0x80, 0x03, 0x00, 0x03, 0x80, 0x04, 0x00, 0x02, 0x80, 0x0B, 0x00, 0x01, 
  61. 0x00, 0x0C, 0x00, 0x04, 0x00, 0x01, 0x51, 0x80, 0x00, 0x00, 0x00, 0x10);
  62. raw_data = raw_data + "OpenPGPdetect";
  63.  
  64. IPH = 20;
  65. UDPH = 8;
  66. PGPNET_BASE = 137;
  67. UDP_LEN = UDPH + PGPNET_BASE;
  68. IP_LEN = IPH + UDP_LEN; 
  69.  
  70. ip = forge_ip_packet(ip_v : 4,
  71.                      ip_hl : 5,
  72.                      ip_tos : 0,
  73.                      ip_len : IP_LEN, 
  74.                      ip_id : 0xABBA,
  75.                      ip_p : IPPROTO_UDP,
  76.                      ip_ttl : 255,
  77.                      ip_off : 0,
  78.                      ip_src : srcaddr,
  79.                      ip_dst : dstaddr);
  80.  
  81. dstport = 500;
  82. srcport = 500;
  83.  
  84. udpip = forge_udp_packet(ip : ip,
  85.                          uh_sport : srcport,    
  86.                          uh_dport : dstport,
  87.                          uh_ulen : UDP_LEN, #udp = 8
  88.                          data : raw_data);
  89.   
  90. filter = string("((udp and dst port ", srcport, ") or (icmp)) and src host ", dstaddr, " and dst host ", srcaddr);
  91. result_suc = send_packet(udpip, pcap_active:TRUE, pcap_filter:filter);
  92. if (result_suc)
  93. {
  94.  protocol_type = get_ip_element(ip:result_suc, element:"ip_p");
  95.  if (protocol_type == IPPROTO_UDP)
  96.  {
  97.   result = get_udp_element(udp:result_suc, element:"data");
  98.   if(strlen(result) < 88) exit(0);
  99.   if ((result[2] == raw_string(0x00)) && (result[3] == raw_string(0x00)) && 
  100.       (result[4] == raw_string(0x00)) && (result[5] == raw_string(0x00)) && 
  101.       (result[6] == raw_string(0x00)) && (result[7] == raw_string(0x00)))
  102.    {
  103.     if (
  104.         (result[16] == raw_string(0x01)) && (result[17] == raw_string(0x10)) && 
  105.         (result[18] == raw_string(0x02)))
  106.         {
  107.          OpenPGP = "";
  108.          for (i = 0; i < 1000; i = i + 1)
  109.          {
  110.           if (result[88+i] == raw_string(0x00))
  111.           {
  112.            i = 1000;
  113.           }
  114.           else
  115.           {
  116.            OpenPGP = OpenPGP + result[88+i];
  117.           }
  118.          }
  119.          if (i == 1000)
  120.          {
  121.           warning_text = "PGPNet uses OpenPGP build version: ";
  122.           warning_text = warning_text + OpenPGP;
  123.                 security_note(port:500, data:warning_text);
  124.          }
  125.         }
  126.    }
  127.  }
  128. }
  129.